package com.mingyuan.library.domain.lending.patron.model.valueobject;

import com.mingyuan.library.domain.common.model.ValueObject;
import com.mingyuan.library.domain.lending.book.model.entity.AvailableBook;
import com.mingyuan.library.domain.lending.book.model.entity.BookOnHold;
import lombok.NonNull;
import lombok.Value;

import java.util.Set;

/**
 * 读者预定信息
 *
 * @author yangzk
 * @date 2023/12/28 19:16
 **/
@Value
@ValueObject
public class PatronHolds {
    /**
     * 最大预定数量(最多可以预定多少本书)
     */
    public static int MAX_NUMBER_OF_HOLDS = 5;
    /**
     * 预定图书集合
     */
    Set<Hold> resourcesOnHold;

    /**
     * 是否预定图书
     *
     * @param bookOnHold 预定图书
     * @author yangzk
     * @date 2023/12/28 19:18
     **/
    public boolean a(@NonNull BookOnHold bookOnHold) {
        Hold hold = new Hold(bookOnHold.getBookId(), bookOnHold.getHoldPlacedAt());
        return resourcesOnHold.contains(hold);
    }

    /**
     * 预定数量
     *
     * @author yangzk
     * @date 2023/12/28 19:25
     **/
    public int count() {
        return resourcesOnHold.size();
    }

    /**
     * 最大预定之后预定
     *
     * @param book 可预定的图书
     * @author yangzk
     * @date 2023/12/28 19:25
     **/
    public boolean maximumHoldsAfterHolding(AvailableBook book) {
        return count() + 1 == MAX_NUMBER_OF_HOLDS;
    }
}
